1 概览
1.1 安装
pip install scrapy=1.4.0
1.2 测试Demo
vim quotes_spider.py
|
|
scrapy runspider quotes_spider.py -o quotes.json
查看输出结果
|
|
2 入门
2.1 创建项目
scrapy startproject tutorial
结构如下
|
|
2.2 第一个爬虫
2.3.1 定义爬虫
爬虫类必须是scrapy.Spider的子类,并且定义初始爬取页面
在tutorial/spiders下创建爬虫类
|
|
- name: 爬虫的名称,在项目中必须是唯一的。
- start_requests(): 返回可遍历的Requests,爬虫将从这里进行爬取。
- parse(): 对请求的结果数据进行解析。
2.3.2 运行爬虫
scrapy crawl quotes
结果
|
|
现在当前目录下应该出现了两个文件 quotes-1.html
quotes-2.html
2.3.3 抽取数据
使用 scrapy shell 'http://quotes.toscrape.com/page/1/'
通过shell来学习如何抽取我们想要的数据。
CSS选择器
|
|
使用extract_first抽取数据可以避免角标越界,抽取不到会返回None。
XPath
|
|
XPath表达式非常强大,并且它是Scrapy Selectors的基础。
起始CSS选择器在底层也是被转换为XPath去执行的。
举例 抽取title和author
- HTML原文
|
|
- 进入抽取shell
scrapy shell 'http://quotes.toscrape.com'
- 获取quote
quote = response.css('div.quote')[0]
- 抽取title
title = quote.css('span.text::text').extract_first()
- 抽取author
author = quote.css('small.author::text').extract_first()
- 抽取tags
tags = quote.css('div.tags a.tag::text').extract()
我们学会了如何抽取指定信息后,将抽取结果存储到python的字段中
|
|
2.3.4 存储数据
scrapy crawl quotes -o quotes.json
注意 重复执行爬虫 输出的文件不会覆盖 而是追加,从而导致了错误的json格式scrapy crawl quotes -o quotes.jl
2.3.5 获取新的连接
HTML
|
|
我们虽然可以通过 response.css('li.next a').extract_first()
拿到
但是我们需要的仅仅是href,可是这样操作 response.css('li.next a::attr(href)').extract_first()
|
|
现在我们的爬虫是这样的
|
|
加入一些简化操作
follow支持相对路径
follow可以自动识别href
|
|
3 Demo
帮同学爬一个健康网站的数据,网站也没有反爬手段,结构又很简单,所以现学现卖用scrapy(代码写的比较随意,仅供参考),
其实向这种简单的爬虫,直接用requests更省事儿。
project最终结构
核心代码
food_name.py
|
|
food_detail.py
|
|
必须掌握 调试解析html的方法scrapy shell ' scrapy shell 'http://www.boohee.com/food/group/1''
必须掌握导出结果的方法
输出到控制台 scrapy crawl author
输出到文件 scrapy crawl quotes -o quotes.json